今天開始要進入部署至 MCU 上的過程,會使用 CubeMX 產生出 Template 以後來研究,究竟要後續要怎麼去做實際的應用。
今天需要準備的設備是電腦一台+B-U585I-IOT02A 開發板以及其連接線。
還記得上次透過 CubeMX 產出的 UART 測試 Code 嗎?今天就會繼續使用那份檔案開始。
首先先打開 CubeMX 專案檔(.ioc檔案),點開左邊選單欄的 Middleware and Software Packs,找到 X-CUBE-AI 這個選項點下去,會彈出底下這個視窗:
這次我們是為了快速驗證結果,所以先選擇 AI core 以及 Application 中的 SystemPerformance 選項。按下確認後,再次點選左邊側邊欄的 X-CUBE-AI ,並且點選右上角的 "Add network" 選項就會看到底下的樣子:
另外在選擇 X-Cube-AI 插件後,CubeMX 可能會問你是否要把系統的參數調成最佳化(基本上就是把頻率調最高),這邊按確認即可(但有些板子就會出現一些問題...例如比較複雜的 H7 系列)
接著就可以加入 Model 的選項,這次選擇的依然是從 ST-Model Zoo 載下來的 EfficientNet,Int8版本,接著就跟前面的使用雲端版的差不多,注意的是右邊的小齒輪點開以後可以針對更細節的 RAM 和 FLASH 做設置:(如下圖,但這次先都不勾任何選項)
當都選擇玩按下 Analyze 以後就會跳出這個視窗(如下圖)或是右上角的 Setting 關掉以後他也會自己跳出來...我自己覺得這個比較像是 bug:
跑完按確認以後就可以得到如下的結果:
這邊介紹幾個重點,如果有給出 validation 的資料的話,按下 validation 以後就可以進行驗證和得到結果,但其實我覺得自己在訓練和自己壓縮的時候做會比較方便,之後會用(應該?)
而 Showgraph 就會叫出 Netron 的圖形化介面,能夠很清楚地看到模型的結構以及輸入輸出大小,左下角有個小按鈕可以切換成 Memory layout:
接著按下 GENERATE CODE 以後就能夠回到程式碼的頁面,然後一樣進行編譯。
(但這邊如果是使用自動生成的 CMake,我自己是會碰到 CubeMX 產出來的 CMakeLists 會有一些include 上的錯誤,可能需要手動調整。)
接著編譯以及燒錄以後,可以接上 UART1(也就是On-board STLink,同時具有 TTL 轉 USB 的功能),就能看到以下輸出:
這邊這個程式會自動使用隨機輸入跑模型 16 次,並且取得推理的表現平均值,如下圖:
這個功能好用在哪呢?今天如果我需要快速評估手上的開發板對於目前模型的適配性,這個就能夠快速得到結果。
另外是如果我今天想要針對目前的程式進行加速或修改(例如更改模型架構,或是針對 MCU 硬體設備上的優化修改)這個也能快速的進行實驗並得到結果。
今天就先與大家分享到這邊,明天就會開始比較深入的去看究竟這個程式是怎麼去進行推理的,請各位敬請期待~